//此文件是对axios的二次封装
//1.安装axios   yarn add axios -S
//2. 引入axios
import Axios from "axios";
import Nprogress from 'nprogress/nprogress.js'
import 'nprogress/nprogress.css'
import store from "@/store";
//3.创建一个新的axios对象
const service=Axios.create({
    baseURL:"/api",//配置接口的公共路径部分
    timeout:'20000'//设置超时时间
})//返回和原来一模一样的axios实例,
//4.设置请求拦截器 拦截的是请求报文  请求拦截器和响应拦截器 是用来配置头和其他功能的 config拦截的请求报文
service.interceptors.request.use(
    (config)=>{
        Nprogress.start()//开启进度条
        //从store当中获取到用户的临时的唯一标识,
        let userTempId=store.state.user.userTempId
        //用户的临时标识存在 就添加到请求头中
        if (userTempId) config.headers.userTempId=userTempId
        //将token添加到请求头里
        let token=store.state.user.token
        if (token) config.headers.token=token
        return config
    },
    // ()=>{}
)
//5.设置响应拦截器 拦截的响应报文
service.interceptors.response.use(
    //成功的回调
    (response)=>{

        Nprogress.done()//关闭进度条
        return response.data//以后返回的不是真正的请求 而是真正的返回的数据
    },
    //失败的回调
    (error)=>{
        Nprogress.done()//关闭进度条
        alert("请求失败"+error.message||"未知错误")
        return new Promise(()=>{})//中断promise链,代表以后的错误就不需要处理了
       // return Promise.reject(new Error('请求错误'))//代表错误可以往后传递,后面axios返回的promise可以继续处理

    }
)
//6.对外暴露service
export default service